package initialization

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
	"go.uber.org/zap"
	"goFunc/global"
	routerGroup "goFunc/router"
)

//在服务启动之前需要进行初始化的引用

func init() {
	//读取配置文件
	InitConfig()
	//加载日志包 --zap包
	InitZap()
	//加载路由 -- gin
	InitRouter()
}

func InitConfig() {
	//viper读取配置文件
	//初始化
	v := viper.New()
	//设置配置文件路径
	v.SetConfigFile("/Users/fuyx/GolandProjects/study-server/serverApi/application.yaml")
	//读取配置文件
	err := v.ReadInConfig() // Find and read the config file
	if err != nil {         // Handle errors reading the config file
		panic(fmt.Errorf("fatal error config file: %w", err))
	}
	// 将读取的配置信息保存至全局变量ApiConfig
	if err := v.Unmarshal(&global.ApiConfig); err != nil {
		panic(fmt.Errorf("unmarshal conf failed, err:%s \n", err))
	}
}

func InitZap() {
	//初始化日志
	config := zap.NewDevelopmentConfig()
	config.OutputPaths = []string{
		fmt.Sprintf("%s", global.ApiConfig.LogPath),
		"stderr",
		"stdout",
	}
	//构建并初始化
	logger, _ := config.Build()
	//替换为全局变量
	zap.ReplaceGlobals(logger)
}

func InitRouter() {
	router := gin.Default()
	apiRouter := router.Group("v1")
	routerGroup.Router(apiRouter)
	global.Router = router

}
